\chapter{结论}
\label{chap:concl}

\section{研究成果}

本文针对深度学习编译器计算图替换这一任务，设计了一种嵌入Python的声明式领域特定语言——GSL，旨在提升深度学习编译器开发与使用的效率。

计算图替换的本质就是源模式图与目标模式图的结构及其算子的属性约束。基于这一点认识，设计了模式表达式与属性表达式这两门子语言。模式表达式用于表达模式图的结构，属性表达式用于描述属性约束，这两种表达式互相融合，构成了GSL的整体。本文给出了模式表达式与属性表达式核心部分规范的语法和语义的定义。为了增强其表达能力，还将多输出顶点和可变模式纳入到语法和语言的定义中。此外，本文也探讨了其作为嵌入式语言在Python中的API设计准则。

本文也研究了语言实现中的若干关键问题。首先，在模式匹配与属性求值的依赖问题上，提出了在匹配的同时求值的策略，这也确定了该语言在具体实现中的运行模式。然后，就多输出顶点匹配问题，提出了双向匹配算法，该算法具有与计算图规模呈线性、与模式图规模呈平方的时间复杂度。该算法通过适当修改可以适用于可变输出顶点的模式。此外，还结合GSL自身的特点，对语言实现相关的语义检查、记忆优化等方面进行了探讨。

本文进行了一些实验对GSL的设计与实现进行评价。在对GSL语言设计的评价中，GSL比TVM Relay内部的DFP语言能够覆盖更多深度学习编译器中的实际替换，同时相比纯C++编写的替换以及使用DFP编写的替换平均平均能减少约50\%的代码长度。在双向匹配算法的测试中，全部匹配时算法的运行时间随计算图规模线性增长，模式图规模对于算法运行时间影响较小，说明该算法是高效的。

\section{应用场景}

GSL的主要应用是简化现有深度学习编译器的开发与使用。对于深度学习编译器的开发者而言，可以考虑将非常用的替换规则使用GSL进行编写，以减少编译器核心代码量，提高开发效率，提高图替换应用的灵活性。对于使用者而言，可能需要将深度学习模型部署到不同硬件平台上，不同模型、不同硬件平台可能对计算图替换的形式有不同要求。使用者可以通过GSL根据需要自行编写新的规则，而不需要编写冗长且易出错的命令式图替换程序。

本文中GSL被设计为嵌入在Python中的领域特定语言，并且在实验中针对的是TVM Relay中间语言。但事实上GSL具有很强的可移植性。通过对API的简单修改，也可以使其嵌入到C++等其它语言中。也可以更换其目标平台，将其应用于MLIR\cite{lattner2021mlir}等其它编译器框架中。GSL所包含的模式表达式与属性表达式也是可扩展的，可以根据所使用的编程语言以及目标平台的需要进行扩充，以满足多样化的需求。

GSL对于计算图的自动调优可以起到辅助作用。目前已有MetaFlow\cite{jia2019metaflow}、TASO\cite{jia2019taso}、OCGGS\cite{fang2020ocggs}等工作对计算图的自动调优提出了相关方法。但是这些工作都缺乏一个面向用户的界面，不便于增加和修改图替换的规则。GSL正好提供了这一交互方式，有助于将此类工作运用于深度学习模型的实际部署工作中。

\section{未来工作}

在GSL上可进一步的工作可以分为两个方面。一方面是对于该语言自身的改进，另一方面是该项研究对于深度学习计算图优化方面其它研究的启发。

就GSL本身而言，可以考虑以下方面的改进：在语言设计上，考虑是否可以对其进行进一步地扩展，以表达更多的图替换规则。在语言实现上，可以考虑是否有其它执行方式，用于多输出顶点模式和可变模式匹配的双向匹配算法是否有可以提升的空间。目前的替换算法是使用Python编写的原型，执行效率较低，这部分代码应该考虑使用C++重新编写，同时还要考虑和Python代码交互的问题。此外，可以对替换规则的语义进行更完备的检查，并以一种更加友好的方式报告相应的错误，使其便于定位并修改。在实际应用上，也需要考察GSL能否真正提高深度学习编译器开发与使用的效率，以及如何衡量效率的提升等问题。

在深度学习计算图优化这一领域上，由GSL这一工作出发对其中一些问题也会产生新的思考。图替换规则可以用程序语言来描述，常规的程序语言可以进行程序分析，那么图替换语言也可以进行类似的工作。通过对图替换规则的分析，可以掌握关于规则的更多信息。结合对于计算图的分析，可以更有利于计算图的优化，例如决定在计算图上是否需要应用该规则、安排替换规则应用的顺序、辅助计算图的自动调优等。
